Otimizando Access com VBA - 1
Desde as épocas dos *.dbf, utilizados junto ao consagrado Clipper, os banco de dados tiveram uma evolução significativa no mercado, mas somente vieram a se tornar popular com o surgimento do pacote Office97, onde destacava-se o Access, um banco de dados relacional desenvolvido para pequenas e médias empresas com vários recursos, incluindo controles activex, comandos em VBA (visual basic for aplication), e suporte para linguagem SQL.

Grande parte de desenvolvedores e usuários que utilizam o Access, fazem uso de macros e consultas com assistentes para criar seus projetos, o que pode apresentar resultados. Porém inadequados, o uso de macros no Access torna o banco muito mais pesado pelo fato de serem comandos predefinidos que passam a atuar como objetos, assim como as consultas, utilizadas para cálculos e relatórios, que ficam armazenadas junto ao banco, tornando objetos ativos, e por esta razão nos deparamos com conclusões erradas de que o Access é insuficiente ou menos rápido comparado aos outros bancos de dados existentes.

Para tornarmos um banco de dados rápido e eficiente, devemos fazer uso correto do sistema de armazenamento, ou seja, a forma que as tabelas são criadas. Todo programador experiente sabe que o segredo está em distribuir as informações em várias tabelas que vão trabalhar de forma relacionada, este é um princípio para ter um banco de dados rápido e eficiente.

Com o uso de comados SQL(Structured Query Language), podemos ter uma maior flexibilidade para manipularmos tabelas, com a vantagem de que os comandos SQL, são ativados a partir de um evento, ou seja, ao clicarmos um botão, alterarmos uma caixa de texto, ao carregar um formulário, assim sendo, os comandos SQL são apenas linhas de códigos, que não pesam no sistema, carregando consultas e tabelas, somente quando necessárias, trazendo mais agilidade e maior desempenho, e claro menor esforço para sua máquina.

Para fazermos uso correto do Access, devemos utilizar seu maior potencial, que faz a diferença entre os outros bancos, ou seja o VBA, (visual basic for aplication), uma linguagem de programação muito poderosa, com 282 objetos de classe, podendo assumir 3778 métodos, ou seja 1.065.396 comandos de objetos, sem contarmos as possíbilidade de manipular as constantes e propriedades de cada objeto, por exemplo o método RunCommand, pode oferecer mais 334 manipulações, que podem influenciar mais uma série de propriedades, fora todo esse poderio, o uso de comandos vba, possibilita elaboração de códigos mais limpos e precisos, sem dúvida alguma bem melhor do que o uso das 49 macros pesadas e limitadas, que podem atingir 999 numero de ações.

Com o uso de vba, podemos obter vários aspectos interessantes, podemos inserir comandos diretos em botões, imagens, caixas de textos, enfim, podemos manipular eventos em qualquer objeto estando ou não no formulário ativo, podemos desenvolver nossos botões com o Adobe Photoshop, e inserirmos em nosso formulario como imagens, aplicando os comandos ou eventos, podendo com isso elaborarmos projetos mais personalizados e profissionais .

Com isso, devemos deixar claro que em meio a tantos bancos de dados existentes, (PostgreeSql, MySql, SqlServer, Oracle), cada qual tem sua importância, cada qual tem seu aspecto positivo, assim como negativo, dependendo da atividade necessária com que elaboramos nosso projeto, da mesma forma que existem diferenças entre um carro popular, um furgão e um caminhão, cada qual tem seu custo por benefício, conforme suas necessidades.

Importante lembrar que não devemos deixar o fanatismo influenciar na escolha de um ou outro sistema, mas sim sabermos definir primeiramente nossa necessidade principal, e tendo a possibilidade de varias opções para banco de dados ou outros tipos de software, o que devemos é aprimorarmos nosso nível de conhecimento em cada um deles, o que é um erro comum entre muitos usuarios, que migram para outros sistemas, levados pela opinião, não pela necessidade, e muitas vezes terminam por dominar apenas 30% de cada aplicativo, anciosos por qual novidade está provir.

A partir desta coluna , estarei levando uma série de códigos interessantes, limpos e praticos, que podem ser de grande utilidade para os usuários, do iMasters, assim como quero agradecer a equipe do Imasters, por manter a internet com a base com que ela foi criada, a troca de informações gratuita, e sem perder o alto nível técnico, o que vem sendo uma raridade na web. Vejamos agora alguns aspectos interesantes sobre o banco de dados Access :

Banco de dados

objetos de classe : 282 metodos de objetos: 3778 tamanho de arquivo(*.mdb):2 gigabytes (por capacidade de armazenamento,podendo aumentar vinculando com tabelas de outros arquivos)
número de objetos: 32.768
módulos:1000
número de caracteres em uma senha:14
número de caracteres em nome de grupo:20 número de usuários simultâneos:255

tabelas

caracteres em um nome de tabela:64
caracteres em um nome de campo:64
número de campos em uma tabela:255
número de tabelas abertas:2048
tamanho de uma tabela:1000 megabytes
número de caracteres em campo de texto:255
número de caracteres em campo de memorando:65.535 kbytes
Tamanho de um campo OLE(object linked and embed):1000 megabytes
número de índices por tabela:32
número de campos por índice:10
caracteres em uma regra de validação:2.048
caracteres por registro:2000
caracteres em definição de propriedades de campo:255

consultas

número de tabelas em uma consulta:32
número de campos em um conjunto de registros:255
capacidade de um conjunto de registros:1000 megabytes
número de níveis em consultas aninhadas:50
número de caracteres como parametro em uma consulta parametro:255
numero de operadores AND em clausulas where ou having:40
numero de caracteres em uma instrução SQL:64.000

formulários

numero de caracteres em um rótulo:2048
número de caracteres em uma caixa de texto:65.535
ferramentas internas para formulário:167 largura de um formulário:55,87cm
largura de um relatorio:55,87cm
altura de uma seção:55,87cm
número de níveis de formulários ou relatórios aninhados:7
número de páginas por relatório:65.536

Descrição dos 282 objetos de classe e quantidade de metodos (ações) suportados

Application 71
BoundObjectFrame 94
CheckBox 80
Collection 4
ComboBox 116
CommandButton 80
Connection 15
Connections 2
Container 8
Containers 2
Control 20
Controls 4
CustomControl 58
Database 28
Databases 2
DBEngine 22
Docmd 43
Document 10
Documents 2
ErrObject 4
Error 5
Errors 2
Field 24
Fields 4
Form 179
Forms 4
Global 4
Group 5
GroupLevel 13
Groups 4
Hyperlink 4
Image 55
Index 12
Indexes 4
Label 50
Line 25
ListBox 100
Module 19
Module 4
ObjectFrame 86
OptionButton 79
OptionGroup 70
Page 40
PageBreak 15
Pages 4
Parameter 4
Parameters 2
Properties 4
Properties 4
Propertie 5
QueryDef 22
QueryDefs 4

Recordset 49
Recordsets 2
Rectangle 35
Reference 9
References 8
Relation 8
Relations 4
Report 105
Reports 4
Screen 8
Section 35
SubForm 47
SubReport 6
TabControl 56
TableDef 20
TableDefs 4
TextBox 106
ToggleButton 77
User 7
Users 4
Workspace 20
Workspaces 4
ColorConstants 8
Constants 11
Constants 224
Conversion 24
DateTime 21
FileSystem 20
Financial 13
Information 14
Interaction 21
KeyCodeConstants 99
LanguageConstants 21
Math 11
OldConstants 252
Strings 43
SystemColorConstants 29
AcCloseSave 3
AcCommand 336
AcControlType 19
AcDataObjectType 4
AcDataTransferType 3
AcFindField 2
AcFindMatch 3
AcFormOpenDataMode 4
AcFormView 4
AcHyperlinkPart 4
AcModuleType 2
AcObjectType 7
AcOpenDataMode 3
AcOutputObjectType

AcPrintQuality 4
AcPrintRange 3
AcQuitOption 3
AcRecord 6
AcSearchDirection 3
AcSection 9
AcSendObjectType 6
AcSpreadSheetType 8
AcSysCmdAction 13
AcTextTransferType 10
AcView 3
AcWindowMode 4
CollatingOrderEnum 25
CommitTransOptionsEnum 1
CursorDriverEnum 5
DatabaseTypeEnum 6
DataTypeEnum 21
DriverPromptEnum 4
EditModeEnum 6
FieldAttributeEnum 7
IdleEnum 2
LockTypeEnum 4
ParameterDirectionEnum 4
PermissionEnum 17
ProcKind 4
QueryDefStateEnum 2
QueryDefTypeEnum 13
RecordsetOptionEnum 12
RecordsetTypeEnum 5
RecordStatusEnum 5
RefKind 2
RelationAttributeEnum 7
ReplicaTypeEnum 2
SetOptionEnum 11
SynchronizeTypeEnum 4
TableDefAttributeEnum 6
UpdateCriteriaEnum 6
UpdateTypeEnum 3
VbAppWinStyle 6
VbCalendar 2
VbCompareMethod 3
VbDayOfWeek 8
VbFileAttribute 8
VbFirstWeekOfYear 4
VbIMEStatus 20
VbMsgBoxResult 7
VbMsgBoxStyle 20
VbQueryClose 5
VbStrConv 9
VbVarType 17
WorkspaceTypeEnum